import router from '@/router'
import Store from '@/store'
import Nprogress from 'nprogress'
import 'nprogress/nprogress.css'

// 前置守卫
const whitePath = ['/login', '/404']
router.beforeEach(async(to, from, next) => {
  Nprogress.start()
  /**
   * 有token
   *    从 login 页面进入首页
   *    其他页面正常进入
   * 无token
   *    只能进入不需要登陆的页面
   *    如果进入的是要登陆的页面，就跳转到登录页面
   */
  if (Store.state.user.token) {
    // toLowerCase() 这个是把字符串转为小写的
    if (to.path.toLowerCase() === '/login') {
      next('/')
    } else {
      if (Store.state.user.userInfo.userId) {
        next()
      } else {
        // 在获取用户信息之后添加了路由，通过addRoutes添加的
        // 通过addRoutes添加的路由特点：不能立马使用，需要在经过一次导航守卫
        await Store.dispatch('user/getUserInfo')
        next(to.fullPath)
      }
    }
  } else {
    if (whitePath.includes(to.path.toLowerCase())) {
      next()
    } else {
      // next('/login')
      // fullPath:带参数的 path 地址
      next('/login?redirect=' + to.fullPath)
    }
  }
  Nprogress.done()
})
// 后置守卫，并不是每个路由跳转都会经过后置守卫，因为它当前已处于某个路由时，你跳转它不会再次触发
router.afterEach(() => {
  Nprogress.done()
})
